#!/bin/bash

# 数据库初始化运行脚本
# 帮助用户方便地执行数据库初始化操作

# 设置颜色变量
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 输出信息函数
echo_info() {
    echo -e "${BLUE}[信息]${NC} $1"
}

echo_success() {
    echo -e "${GREEN}[成功]${NC} $1"
}

echo_warning() {
    echo -e "${YELLOW}[警告]${NC} $1"
}

echo_error() {
    echo -e "${RED}[错误]${NC} $1"
}

# 获取项目根目录
script_dir="$(dirname "$0")"
project_root="$(cd "$script_dir"/.. && pwd)"

# 检查是否已在虚拟环境中
echo_info "检查虚拟环境..."
if [ -z "$CONDA_DEFAULT_ENV" ]; then
    echo_warning "您当前未在conda虚拟环境中运行此脚本"
    echo_warning "请先激活虚拟环境再运行此脚本："
    echo_warning "    conda activate lzy-xiuxian"
    exit 1
fi

echo_success "已在虚拟环境中: $CONDA_DEFAULT_ENV"

# 检查Go是否安装
echo_info "检查Go环境..."
if ! command -v go &> /dev/null; then
    echo_error "未找到Go命令，请确保已安装Go并配置了环境变量"
    exit 1
fi

go_version=$(go version)
echo_success "已安装 $go_version"

# 在当前项目目录创建临时目录
echo_info "准备编译环境..."
temp_dir="$project_root/.temp_init_db"

# 创建临时目录，如果已存在则跳过清理
if [ -d "$temp_dir" ]; then
    echo_warning "临时目录已存在，跳过清理步骤"
else
    mkdir -p "$temp_dir"
fi

echo_success "临时目录准备完成: $temp_dir"

# 设置Go环境变量到临时目录，解决权限问题
export GOMODCACHE="$temp_dir/go_mod_cache"
mkdir -p "$GOMODCACHE"
echo_info "已设置GOMODCACHE到: $GOMODCACHE"

export GOCACHE="$temp_dir/go_cache"
mkdir -p "$GOCACHE"
echo_info "已设置GOCACHE到: $GOCACHE"

export GOSUMDB="off"
echo_info "已禁用GOSUMDB验证"

# 复制初始化脚本到临时目录并进入临时目录
cp "$project_root/scripts/init_database.go" "$temp_dir/"
cd "$temp_dir" || exit 1

echo_info "开始编译和运行数据库初始化脚本..."

# 初始化Go模块
# echo_info "初始化Go模块..."
# go mod init init_database
# if [ $? -ne 0 ]; then
#     echo_error "Go模块初始化失败"
#     cd "$project_root"
#     exit 1
# fi

echo_success "Go模块初始化成功"

# 添加必要的依赖包
echo_info "添加必要的依赖包..."
# 设置代理以加速下载
export GOPROXY="https://goproxy.cn,direct"
echo_info "使用代理: $GOPROXY"

# 初始化Go模块并安装所有依赖
echo_info "初始化Go模块并安装所有依赖..."
# 确保go.mod文件存在
go mod init github.com/xianxiagame/scripts || true

echo_info "执行go mod tidy来安装所有依赖..."
go mod tidy
if [ $? -ne 0 ]; then
    echo_warning "依赖安装失败，尝试再次执行..."
    go mod tidy
    if [ $? -ne 0 ]; then
        echo_error "依赖安装失败，请检查网络连接"
        cd "$project_root"
        exit 1
    fi
fi

echo_success "所有依赖包安装成功"

# 编译并运行初始化脚本
echo_info "编译初始化脚本..."
if ! go run init_database.go; then
    echo_error "数据库初始化失败，请检查错误信息"
    cd "$project_root"
    #rm -rf "$temp_dir"
    exit 1
fi

echo_success "数据库初始化完成！"

echo_success "数据库初始化脚本运行完毕！"

echo "\n以下是一些常用的后续操作提示："
echo "1. 启动后端服务：cd $project_root/backend && go run cmd/server/main.go"
echo "2. 查看数据库内容：使用MySQL客户端连接到mysql容器中的xianxia_game数据库"
echo "3. 如果需要重新初始化数据库，只需再次运行此脚本"
echo "4. 请手动清理临时文件：rm -rf $temp_dir"